#!/usr/bin/env node

/**
 * 检查数据库表结构的脚本
 * 使用方法: node scripts/check-tables.js
 */

const { Pool } = require('pg')

// 数据库连接配置
const pool = new Pool({
  host: 'localhost',
  port: 5432,
  database: 'aide',
  user: 'postgres',
  password: 'unidt@123',
})

async function checkTables() {
  const client = await pool.connect()
  
  try {
    console.log('🔍 检查数据库 aide 中的表...')
    
    // 查看所有表
    const tablesResult = await client.query(`
      SELECT table_name 
      FROM information_schema.tables 
      WHERE table_schema = 'public'
      ORDER BY table_name
    `)
    
    console.log('\n📋 数据库中的表:')
    if (tablesResult.rows.length === 0) {
      console.log('❌ 没有找到任何表')
    } else {
      tablesResult.rows.forEach((row, index) => {
        console.log(`${index + 1}. ${row.table_name}`)
      })
    }
    
    // 检查每个表的结构
    for (const tableRow of tablesResult.rows) {
      const tableName = tableRow.table_name
      console.log(`\n🔍 表 ${tableName} 的结构:`)
      
      const columnsResult = await client.query(`
        SELECT column_name, data_type, is_nullable, column_default
        FROM information_schema.columns 
        WHERE table_name = $1
        ORDER BY ordinal_position
      `, [tableName])
      
      if (columnsResult.rows.length === 0) {
        console.log('  ❌ 没有列信息')
      } else {
        columnsResult.rows.forEach(col => {
          const nullable = col.is_nullable === 'YES' ? 'NULL' : 'NOT NULL'
          const defaultValue = col.column_default ? `DEFAULT ${col.column_default}` : ''
          console.log(`  - ${col.column_name}: ${col.data_type} ${nullable} ${defaultValue}`.trim())
        })
      }
      
      // 检查表中的数据量
      const countResult = await client.query(`SELECT COUNT(*) FROM ${tableName}`)
      console.log(`  📊 数据量: ${countResult.rows[0].count} 条记录`)
    }
    
  } catch (error) {
    console.error('❌ 检查表失败:', error.message)
  } finally {
    client.release()
    await pool.end()
  }
}

// 运行脚本
checkTables()
  .then(() => {
    console.log('\n🎉 表检查完成')
    process.exit(0)
  })
  .catch((error) => {
    console.error('💥 表检查失败:', error)
    process.exit(1)
  })
